{
 "metadata": {
  "name": ""
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Communication theory\n",
      "======================================================================\n",
      "\n",
      "These two examples illustrate simple simulation of a digital BPSK\n",
      "modulated communication system where only one sample per symbol is used,\n",
      "and signal is affected only by AWGN noise.\n",
      "\n",
      "In the first example, we cycle through different signal to noise values,\n",
      "and the signal length is a function of theoretical probability of error.\n",
      "As a rule of thumb, we want to count about 100 errors for each SNR\n",
      "value, which determines the length of the signal (and noise) vector(s)."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "#!/usr/bin/python\n",
      "# BPSK digital modulation example\n",
      "# by Ivo Maljevic\n",
      "\n",
      "from numpy import *\n",
      "from scipy.special import erfc\n",
      "import matplotlib.pyplot as plt\n",
      "\n",
      "SNR_MIN     = 0\n",
      "SNR_MAX     = 9\n",
      "Eb_No_dB    = arange(SNR_MIN,SNR_MAX+1)\n",
      "SNR         = 10**(Eb_No_dB/10.0)  # linear SNR\n",
      "\n",
      "Pe          = empty(shape(SNR))\n",
      "BER         = empty(shape(SNR))\n",
      "\n",
      "loop = 0\n",
      "for snr in SNR:      # SNR loop\n",
      " Pe[loop] = 0.5*erfc(sqrt(snr))\n",
      " VEC_SIZE = ceil(100/Pe[loop])  # vector length is a function of Pe\n",
      "\n",
      " # signal vector, new vector for each SNR value\n",
      " s = 2*random.randint(0,high=2,size=VEC_SIZE)-1\n",
      "\n",
      " # linear power of the noise; average signal power = 1\n",
      " No = 1.0/snr\n",
      "\n",
      " # noise\n",
      " n = sqrt(No/2)*random.randn(VEC_SIZE)\n",
      "\n",
      " # signal + noise\n",
      " x = s + n\n",
      "\n",
      " # decode received signal + noise\n",
      " y = sign(x)\n",
      "\n",
      " # find erroneous symbols\n",
      " err = where(y != s)\n",
      " error_sum = float(len(err[0]))\n",
      " BER[loop] = error_sum/VEC_SIZE\n",
      " print 'Eb_No_dB=%4.2f, BER=%10.4e, Pe=%10.4e' % \\\n",
      "        (Eb_No_dB[loop], BER[loop], Pe[loop])\n",
      " loop += 1\n",
      "\n",
      "#plt.semilogy(Eb_No_dB, Pe,'r',Eb_No_dB, BER,'s')\n",
      "plt.semilogy(Eb_No_dB, Pe,'r',linewidth=2)\n",
      "plt.semilogy(Eb_No_dB, BER,'-s')\n",
      "plt.grid(True)\n",
      "plt.legend(('analytical','simulation'))\n",
      "plt.xlabel('Eb/No (dB)')\n",
      "plt.ylabel('BER')\n",
      "plt.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Eb_No_dB=0.00, BER=8.0975e-02, Pe=7.8650e-02\n",
        "Eb_No_dB=1.00, BER=4.9522e-02, Pe=5.6282e-02\n",
        "Eb_No_dB=2.00, BER=4.3870e-02, Pe=3.7506e-02\n",
        "Eb_No_dB=3.00, BER=2.0819e-02, Pe=2.2878e-02\n",
        "Eb_No_dB=4.00, BER=1.1750e-02, Pe=1.2501e-02\n",
        "Eb_No_dB=5.00, BER=6.2515e-03, Pe=5.9539e-03\n",
        "Eb_No_dB=6.00, BER=2.2450e-03, Pe=2.3883e-03\n",
        "Eb_No_dB=7.00, BER=6.3359e-04, Pe=7.7267e-04\n",
        "Eb_No_dB=8.00, BER=1.8709e-04, Pe=1.9091e-04\n",
        "Eb_No_dB=9.00, BER=3.0265e-05, Pe=3.3627e-05"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nlxe9evUyxPD6L774Ai8vLxo0aMAXX3yR9YHZ7uXVUVJSknJ3d1fR0dEqMTFReXt7q8OHD+sdS23d\nulXt27cvXae63i5cuKD279+vlFLq5s2bqnbt2ob4Wd26dUsppdS9e/dU06ZN1bZt23ROpJk8ebLq\n1auX6tChg95RlFJKubq6qsuXL+sdI52goCA1d+5cpZT2/l27dk3nROklJyerKlWqqDNnzuiaIzo6\nWrm5uam7d+8qpZR6+eWX1bx583TN9Pvvv6sGDRqoO3fuqKSkJNW2bVt14sSJTI813B3ND5J2SGuR\nIkUsQ1r15ufnR7ly5fSOkU6VKlXw8fEBoHTp0tSrV4/z58/rnApKliwJQGJiIsnJyZQvX17nRHD2\n7FnWrl3LgAEDDDWIwUhZrl+/zrZt2+jfvz8AdnZ22Nvb65wqvY0bN+Lu7o6Li4uuOcqWLUuRIkW4\nffs2SUlJ3L59GycnJ10z/fnnnzRt2pTixYtja2uLv78/P/30U6bH5quicO7cuXRvuLOzM+fOndMx\nUf4QExPD/v37adq0qd5RSElJwcfHh8qVK9O6dWs8PT31jsSwYcOYOHEiNjbG+XUwmUy0bduWxo0b\nM3v2bL3jEB0dTcWKFenXrx+NGjXitdde4/bt23rHSmfx4sX06tVL7xiUL1+ed999l+rVq1OtWjUc\nHBxo27atrpkaNGjAtm3buHLlCrdv32bNmjWcPXs202ON81tghZwa0lqYxMfH07VrV7744gtKly6t\ndxxsbGyIiori7NmzbN26VfdJw1avXk2lSpXw9fU11F/mO3bsYP/+/axbt47p06ezbds2XfMkJSWx\nb98+Bg0axL59+yhVqhTjxo3TNVNaiYmJrFq1im7duukdhZMnTzJlyhRiYmI4f/488fHxfP/997pm\nqlu3LsOHD+fZZ5+lffv2+Pr6ZvlHUL4qCjKkNXvu3btHly5d6N27Ny+99JLecdKxt7fnhRdeYO/e\nvbrm2LlzJytXrsTNzY2ePXuyefPmdFOz6KVq1aoAVKxYkc6dOxMZGalrHmdnZ5ydnWnSpAkAXbt2\nZd++fbpmSmvdunU88cQTVKxYUe8o7N27lxYtWlChQgXs7OwIDAxk586deseif//+7N27l4iICBwc\nHKhTp06mx+WroiBDWq2nlOLVV1/F09OToUOH6h0HgLi4OMskYXfu3OGXX37B19dX10xjx44lNjaW\n6OhoFi9ezNNPP838+fN1zXT79m1u3rwJwK1bt9iwYYPuI9uqVKmCi4sLx44dA7T2+/r16+uaKa1F\nixbRs2dPvWMA2l/lu3fv5s6dOyil2LhxoyGaSf/++28Azpw5w/Lly7Nuasu7/u+csXbtWlW7dm3l\n7u6uxo4dq3ccpZRSPXr0UFWrVlVFixZVzs7O6ptvvtE7ktq2bZsymUzK29tb+fj4KB8fH7Vu3Tpd\nMx08eFD5+voqb29v5eXlpSZMmKBrnn8zm82GGH106tQp5e3trby9vVX9+vUN8/95VFSUaty4sWrY\nsKHq3LmzYUYfxcfHqwoVKqgbN27oHcVi/PjxytPTUzVo0EAFBQWpxMREvSMpPz8/5enpqby9vdXm\nzZuzPC5fLscphBAid+Sr5iMhhBC5S4qCEEIICykKQgghLKQoCCGEsJCiIAoVW1vbdBOoTZgwAdAm\noLty5Uqmr7lw4QLt2rXj9OnT2NjYMG3aNMtzgwcP5ttvv81WhmnTpjFv3rwM+2NiYixDT81mM/b2\n9vj6+uLt7c0zzzzDpUuXAFi5ciWffvpptr6nENaSoiAKlZIlS7J//37L44MPPgC0u+WzGogXHh7O\nc889B0ClSpWYOnUq9+7ds7wuO5RSzJ07l969ez/0WH9/f/bv38+BAwdo0qQJ06dPB6BDhw4sW7bM\nkkGInCRFQYj7JkyYQMOGDWnatCknT5607F+/fj3t27dHKUXFihVp06ZNplcHUVFRNGvWDG9vbwID\nAy036qW1Y8cO6tati52dtujhb7/9hre3Nz4+PsyYMSPdsalFSinFjRs3LJMHmkwmmjdvzoYNG3Ls\n3y5EKikKolC5c+dOuuajpUuXWp5zcHDg4MGDDB482HIXeHJyMkePHqVu3bqW4z744AMmTZpESkoK\n8M/VQlBQEBMnTuTAgQN4eXkxZsyYDN9/+/btNG7c2LLdr18/pk+fTlRUVIZjt23bhq+vLzVq1GDz\n5s3069fP8tyTTz7J1q1bH/OnIURGUhREoVKiRIl0zUdpJ1BLnSahR48e7Nq1C4A9e/ZkmF3Wzc2N\npk2bsnDhQsu+69evc/36dfz8/ADo27dvph/aZ86cscxrdO3aNa5fv06rVq0A6NOnT7pj/fz82L9/\nP2fOnCE4ONjS1AVQrVo1YmJiHvXHIESWpCgIkYnUv/7XrVtH+/btMzw/cuRIxo8fj1IKpVSGvoUH\nTRSQ1XMPek2HDh3SFZmUlBSZNVjkCikKQqB9IC9ZsgSAJUuW0KJFCwA2b96c6Vz4derUwdPTk1Wr\nVmEymShbtizlypVj+/btACxYsICAgIAMr6tRowZ//fUXoDVXOTg4sGPHDoAHTq+8fft2PDw8LNsX\nLlygRo0aj/aPFeIB7PQOIEReSu1TSNW+fXvGjh2LyWTi6tWreHt7U7x4cRYtWsSlS5coXrw4pUqV\nshyf9q/zjz76KN25vv32WwYOHMjt27dxd3cnLCwsw/dv1apVuiGtYWFh9O/fH5PJxLPPPpvu/Kl9\nCkopHBwcmDNnjuW5yMhIw6wnLQoWmRBPiCx8//33nDt3Ll1b/uNSStGoUSP27NlD0aJFH+kcKSkp\nNGrUiL1791pGMQmRU6QoCJHHZsyYQYkSJdKNJsqOlStXcvDgQT7++OMcTiaEFAUhhBBpSEezEEII\nCykKQgghLKQoCCGEsJCiIIQQwkKKghBCCAspCkIIISz+H8OiOOwywmeZAAAAAElFTkSuQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x3d4efd0>"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "In the second, slightly modified example, the problem of signal length\n",
      "growth is solved by braking a signal into frames.Namely, the number of\n",
      "samples for a given SNR grows quickly, so that the simulation above is\n",
      "not practical for Eb/No values greater than 9 or 10 dB."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "#!/usr/bin/python\n",
      "# BPSK digital modulation: modified example\n",
      "# by Ivo Maljevic\n",
      "\n",
      "from scipy import *\n",
      "from math import sqrt, ceil  # scalar calls are faster\n",
      "from scipy.special import erfc\n",
      "import matplotlib.pyplot as plt\n",
      "\n",
      "rand   = random.rand\n",
      "normal = random.normal\n",
      "\n",
      "SNR_MIN   = 0\n",
      "SNR_MAX   = 10\n",
      "FrameSize = 10000\n",
      "Eb_No_dB  = arange(SNR_MIN,SNR_MAX+1)\n",
      "Eb_No_lin = 10**(Eb_No_dB/10.0)  # linear SNR\n",
      "\n",
      "# Allocate memory\n",
      "Pe        = empty(shape(Eb_No_lin))\n",
      "BER       = empty(shape(Eb_No_lin))\n",
      "\n",
      "# signal vector (for faster exec we can repeat the same frame)\n",
      "s = 2*random.randint(0,high=2,size=FrameSize)-1\n",
      "\n",
      "loop = 0\n",
      "for snr in Eb_No_lin:\n",
      " No        = 1.0/snr\n",
      " Pe[loop]  = 0.5*erfc(sqrt(snr))\n",
      " nFrames   = ceil(100.0/FrameSize/Pe[loop])\n",
      " error_sum = 0\n",
      " scale = sqrt(No/2)\n",
      "\n",
      " for frame in arange(nFrames):\n",
      "   # noise\n",
      "   n = normal(scale=scale, size=FrameSize)\n",
      "\n",
      "   # received signal + noise\n",
      "   x = s + n\n",
      "\n",
      "   # detection (information is encoded in signal phase)\n",
      "   y = sign(x)\n",
      "\n",
      "   # error counting\n",
      "   err = where (y != s)\n",
      "   error_sum += len(err[0])\n",
      "\n",
      "   # end of frame loop\n",
      "   ##################################################\n",
      "\n",
      " BER[loop] = error_sum/(FrameSize*nFrames)  # SNR loop level\n",
      " print 'Eb_No_dB=%2d, BER=%10.4e, Pe[loop]=%10.4e' % \\\n",
      "        (Eb_No_dB[loop], BER[loop], Pe[loop])\n",
      " loop += 1\n",
      "\n",
      "plt.semilogy(Eb_No_dB, Pe,'r',linewidth=2)\n",
      "plt.semilogy(Eb_No_dB, BER,'-s')\n",
      "plt.grid(True)\n",
      "plt.legend(('analytical','simulation'))\n",
      "plt.xlabel('Eb/No (dB)')\n",
      "plt.ylabel('BER')\n",
      "plt.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Eb_No_dB= 0, BER=7.6900e-02, Pe[loop]=7.8650e-02\n",
        "Eb_No_dB= 1, BER=5.5800e-02, Pe[loop]=5.6282e-02\n",
        "Eb_No_dB= 2, BER=3.7600e-02, Pe[loop]=3.7506e-02\n",
        "Eb_No_dB= 3, BER=2.2600e-02, Pe[loop]=2.2878e-02\n",
        "Eb_No_dB= 4, BER=1.2300e-02, Pe[loop]=1.2501e-02\n",
        "Eb_No_dB= 5, BER=6.6500e-03, Pe[loop]=5.9539e-03\n",
        "Eb_No_dB= 6, BER=2.3000e-03, Pe[loop]=2.3883e-03\n",
        "Eb_No_dB= 7, BER=9.0000e-04, Pe[loop]=7.7267e-04\n",
        "Eb_No_dB= 8, BER=2.0566e-04, Pe[loop]=1.9091e-04\n",
        "Eb_No_dB= 9, BER=3.3893e-05, Pe[loop]=3.3627e-05"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Eb_No_dB=10, BER=4.1425e-06, Pe[loop]=3.8721e-06"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nT59WSikVHR2tSpUqpfbs2aOUysqnu7u7UkqppKQkVbp0aXXt2jWllFJpaWmqUqVKhtcGBgaqOXPm\nZItJp9OpU6dOKaWUGjZsmGrVqpVKSkpSGRkZaufOnerevXtKKaUiIyPVrVu3VGpqqho5cqTy8/Mz\nHCMkJESNGzfusXLwsP+fvJ47pZNaa0pBQgJq6zbORh3OapZK8mQHzTnO0/gRRwt20Lx6Es2fL0nF\ntn6ErPiDhL9K5TiU3IshCssj/wYLsomlAP7OGzRoQHh4OFeuXOHzzz/nxIkTAKSkpODg4MD58+ep\nVKlSjv26detGq1atGDFiRI5O6o4dO9KjRw+GDh3KmjVr+OCDDzh06BAArVq1on///tn6IGxsbDh5\n8iSenp44ODgQExOTYznmf7p27RrOzs5cv34dR0dHBg0ahLu7u3RSPw5z64PIN50OqldHV7061YKh\nGhB06RLs2MHNzT8T+9s1th+twPT4Dgyc04xKc/7iJls4zxe5HCyskIMXIhcaf3ibP38+X331lWGa\n71u3bnHp0iVsbW2pXLmy4XWlSpUyPF+pUiXWr19PeHg4J06cIDMzk5SUFOrVq5frewwcOJAZM2Yw\ndOhQfvzxR4KDg7M9/7B+iEuXLnH37l1q1KiR47nMzEzGjh3L8uXLuXjxIjY2NoZ9HJ9wDjnpgyhK\nKlSArl1xnPIZrQ99wye3RhMVXYrLn01nRYuvcLS59cCL9Ybv0k/Ew8aN8Hd7prWx5nb3f7LWXJw5\nc4ZXX32Vb7/9litXrnD16lXq1q37r5+a7927R48ePRg9ejR//fUXV69epVOnTg/d78UXX2T//v0c\nPHiQtWvX0q9fP8Nzj+qkrlChAiVKlODkyZM5nlu4cCGrV69m06ZNXL9+nfj4eCD/HdMPym8fhMUW\nCKtSsiQ89xy248bgu206rv45P30A7Eqqin/b4kQ4/oeDrd5CTZ8BZ84UcrBCaOf27dvodDoqVKhA\nZmYmkZGRHDx4EHj0iTY1NZXU1FQqVKiAjY0N69ev59dff33o60uWLEmPHj3o27cvTZs2zbbwmYuL\nC6dOncp1PxsbGwYPHsw777xDcnIyGRkZ7Ny5k9TUVG7dukXx4sVxdnbm9u3bjB07Ntu+WjSrS4Gw\nSA9+Qgk0fNfc/SxjPReTmObCC/p3qT6sA296rmF9tde48/aHsGlTkb66KLJXlPlgrbnw8fHh3Xff\n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\n",
       "text": [
        "<matplotlib.figure.Figure at 0x3e64a90>"
       ]
      }
     ],
     "prompt_number": 2
    }
   ],
   "metadata": {}
  }
 ]
}